package dp2.tablet.proyecto.gestores;




import java.util.ArrayList;
import java.util.List;

import dp2.tablet.proyecto.bean.CajaBean;
import dp2.tablet.proyecto.bean.UsuarioBean;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class GestorCaja extends SQLiteOpenHelper {
	
	//TABLA CAJA
	private static final int DATABASE_VERSION = 1;
	private static final String DATABASE_NAME = "Tablet";
	private static final String TABLE_CAJA = "Caja";
	private static final String KEY_ID = "idcaja";
	private static final String KEY_DESCRIPCION = "descripcion";
	private static final String KEY_ESTADO = "estado";
	private static final String KEY_PTO_VENTA = "Idpuntoventa";
	
	//TABLA CASHIER_OPERATION
	private static final String TABLE_OPERACION_CAJA = "cashier_operation";
	private static final String KEY_ID_OPERACION = "idoperacion";
	private static final String KEY_MONTO_SOLES= "monto_soles";
	private static final String KEY_MONTO_DOLARES = "monto_dolares";
	private static final String KEY_MONTO_TARJETA = "monto_tarjeta";
	private static final String KEY_TRABAJADOR = "idtrabajador";
	private static final String KEY_FECHA_CREACION = "created_at";
	
	public GestorCaja(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
		crear();
	}
	
	// Creating Tables
		@Override
		public void onCreate(SQLiteDatabase db) {		
			String CREATE_USUARIO_TABLE = "CREATE TABLE " + TABLE_CAJA + "("
					+ KEY_ID + " INTEGER PRIMARY KEY ," + KEY_DESCRIPCION +" TEXT," +KEY_ESTADO+ " INTEGER, " +KEY_PTO_VENTA+ " INTEGER)";
			String CREATE_OPERACION_CAJA = "CREATE TABLE " + TABLE_OPERACION_CAJA + "("
					+ KEY_ID_OPERACION + " INTEGER ," + KEY_MONTO_SOLES +" REAL," +KEY_MONTO_DOLARES+ " REAL," +KEY_MONTO_TARJETA+ " REAL, "+KEY_TRABAJADOR +" INTEGER,"+ KEY_FECHA_CREACION+" TEXT)";
			db.execSQL(CREATE_USUARIO_TABLE);
			db.execSQL(CREATE_OPERACION_CAJA);
		}
		
		
		public void crear() {
			SQLiteDatabase db = this.getWritableDatabase();
			db.execSQL("DROP TABLE IF EXISTS " + TABLE_CAJA);
			db.execSQL("DROP TABLE IF EXISTS " + TABLE_OPERACION_CAJA);
			onCreate(db);
			db.close();
		}
		
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// Drop older table if existed
			db.execSQL("DROP TABLE IF EXISTS " + TABLE_CAJA);

			// Create tables again
			onCreate(db);
		}
		
		public void addCaja(CajaBean caja) {
			
			
			SQLiteDatabase db = this.getWritableDatabase();

			ContentValues values = new ContentValues();
			values.put(KEY_ID, caja.getId()); 
			values.put(KEY_DESCRIPCION, caja.getDescripcion());
			values.put(KEY_ESTADO, caja.getCashier_state_id());
			values.put(KEY_PTO_VENTA, caja.getSales_point_id());


			// Inserting Row
			db.insert(TABLE_CAJA, null, values);
			db.close(); // Closing database connection
		}
		
		//agregar operaciones en caja 
		public void addOperacion(String id,Double monto_soles,Double monto_dolares,Double monto_tarjeta,Integer idtrabajador,String fecha) {
			//SQLiteDatabase db2 = this.getWritableDatabase();
			//db2.execSQL("DROP TABLE IF EXISTS Usuario");
			
			SQLiteDatabase db = this.getWritableDatabase();
			
			ContentValues values = new ContentValues();
			values.put(KEY_ID_OPERACION, id); 
			values.put(KEY_MONTO_SOLES, monto_soles);
			values.put(KEY_MONTO_DOLARES, monto_dolares);
			values.put(KEY_MONTO_TARJETA, monto_tarjeta);
			values.put(KEY_TRABAJADOR, idtrabajador);
			values.put(KEY_FECHA_CREACION, fecha);

			// Inserting Row
			db.insert(TABLE_OPERACION_CAJA, null, values);
			db.close(); // Closing database connection
		}
		
		/*public CajaBean getUsuario(String strIdCaja) {
			SQLiteDatabase db = this.getReadableDatabase();

			Cursor cursor = db.query(TABLE_CAJA, new String[] { KEY_NUMEROCAJA,
					KEY_ESTADO,KEY_PTO_VENTA }, KEY_NUMEROCAJA + "=?",
					new String[] { String.valueOf(strIdCaja) }, null, null, null, null);
			CajaBean objCaja=null;
			if (cursor.getCount()>0){
				cursor.moveToFirst();
				objCaja = new CajaBean(cursor.getString(0),cursor.getString(1),cursor.getString(2));
			}		
			db.close();
			return objCaja;
		}*/
		
		public List<CajaBean> getAllCaja(String idpuntoventa) {
			List<CajaBean> lstCajas = new ArrayList<CajaBean>();
			// Select All Query
			String selectQuery = "SELECT  * FROM " + TABLE_CAJA  + " WHERE "+KEY_PTO_VENTA+" = "+idpuntoventa+ " and ("+KEY_ESTADO+"=4 OR "+KEY_ESTADO+" = 1)";
			 

			SQLiteDatabase db = this.getWritableDatabase();
			Cursor cursor = db.rawQuery(selectQuery, null);

			// looping through all rows and adding to list
			if (cursor.moveToFirst()) {
				do {
					CajaBean objCaja = new CajaBean(cursor.getInt(0),cursor.getString(1),cursor.getInt(2),cursor.getInt(3));
					// Adding tipoEvento to list
					lstCajas.add(objCaja);
				} while (cursor.moveToNext());
			}
			db.close();
			// return tipoEvento list
			return lstCajas;
		}
		
		public List<Double> getMontos() {
			List<Double> lstMontos = new ArrayList<Double>();
			// Select All Query monto_dolares
			String selectQuery = "SELECT  SUM("+KEY_MONTO_SOLES+"),SUM("+KEY_MONTO_DOLARES+"),SUM("+KEY_MONTO_TARJETA+") FROM " + TABLE_OPERACION_CAJA  + " WHERE datetime("+KEY_FECHA_CREACION+") >= (Select MAX(datetime("+KEY_FECHA_CREACION+")) FROM "+TABLE_OPERACION_CAJA+" WHERE "+KEY_ID_OPERACION+"=3)";
			 
			
			
			SQLiteDatabase db = this.getWritableDatabase();
			Cursor cursor = db.rawQuery(selectQuery, null);

			// looping through all rows and adding to list
			if (cursor.moveToFirst()) {
				do {
					
					lstMontos.add(cursor.getDouble(0));
					lstMontos.add(cursor.getDouble(1));
					lstMontos.add(cursor.getDouble(2));
				} while (cursor.moveToNext());
			}
			db.close();
			// return tipoEvento list
			return lstMontos;
		}
		
		
		
		

		/*public int updateUsuario(UsuarioBean objUsuario) {
			SQLiteDatabase db = this.getWritableDatabase();

			ContentValues values = new ContentValues();
			values.put(KEY_IdUsuario, objUsuario.getIdUsuario());

			// updating row
			return db.update(TABLE_USUARIO, values, KEY_IdUsuario + " = ?",
					new String[] { String.valueOf(objUsuario.getIdUsuario())});
		}*/

		// Deleting single tipoEvento
		/*public void deleteUsuario(UsuarioBean objUsuario) {
			SQLiteDatabase db = this.getWritableDatabase();
			db.delete(TABLE_USUARIO, KEY_IdUsuario + " = ?",
					new String[] { String.valueOf(objUsuario.getIdUsuario()) });
			db.close();
		}*/


		// Getting tipoEvento Count
	/*	public int getUsuarioCount() {
			String countQuery = "SELECT  * FROM " + TABLE_USUARIO;
			SQLiteDatabase db = this.getReadableDatabase();
			Cursor cursor = db.rawQuery(countQuery, null);
			cursor.close();

			// return count
			return cursor.getCount();
		}*/

}
